package com.devMode.AdapterMode;

/**
 * 适配器模式
 * 把一个类接口转换为另一个用户需要的接口
 */
public class AdapterMode {
    public static void main(String[] args) {
        Turkey turkey = new WildTurkey();
        Duck duck = new TurkeyAdapter(turkey);
        duck.quack();
    }
}

interface Duck{
    void quack();
}

interface Turkey{
    void gobble();
}

class WildTurkey implements Turkey{

    @Override
    public void gobble() {
        System.out.println("gobble!!!");
    }
}

/**
 * 适配器通过保存一个被适配的类，并且实现用户想要的接口，
 * 该接口的方法实现将会调用被适配了的方法
 */
class TurkeyAdapter implements Duck{
    /**
     * 被适配类的实例
     */
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey){
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }
    }
